package com.unju.ventanas.responsable;

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;

import com.unju.hibernate.entidades.Responsable;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.imp.PerfilDAOImp;
import com.unju.hibernate.patronDAO.imp.ResponsableDAOImpl;
import com.unju.hibernate.patronDAO.imp.UsuarioDAOImp;
import com.unju.utils.AllShowMessage;
import com.unju.utils.ConstantesGlobales;
import com.unju.ventanas.principal.JFrmPrincipal;

import javax.swing.JCheckBox;
import javax.swing.border.TitledBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.SwingConstants;

import org.apache.log4j.Logger;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class JDAgregarResponsable extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2180235783678584259L;
	final static Logger logger = Logger.getLogger(JDAgregarResponsable.class);

	private Responsable responsable;
	private boolean newResponsable;
	private JTextField txtApellido;
	private JTextField txtNombre;
	private JTextField txtDni;
	private JTextField txtCalle;
	private JTextField txtBarrio;
	private JTextField txtLocalidad;
	private JTextField txtProvincia;
	private JTextField txtLegajo;
	private JTextField txtEmail;
	private JTextField txtCel;
	private JTextField txtTel;
	private JTextField txtNro;

	private JCheckBox chckUsuarioSis;

	public JDAgregarResponsable(JFrmPrincipal jfrmPrincipal) {
		crearVentana();
		panelDatoResp();
		crearBotones();
		setNewResponsable(false);
		setVisible(true);
	}

	public void crearVentana() {
		super.setTitle(ConstantesGlobales.TITULO_AGREGAR_RESPONSABLE);
		setBounds(100, 100, 625, 383);
		getContentPane().setLayout(null);
		setPreferredSize(new Dimension(625, 383));
		setMinimumSize(new Dimension(625, 383));
		setMaximumSize(new Dimension(625, 383));
		setSize(625, 383);
		setModal(true);
		setLocationRelativeTo(JFrmPrincipal.getInstance());
	}

	public void panelDatoResp() {
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBorder(new TitledBorder(null, "Datos Personales",

		TitledBorder.LEFT, TitledBorder.TOP, null, null));
		panel.setBounds(10, 11, 589, 293);
		getContentPane().add(panel);

		JLabel label = new JLabel("Apellido:");
		label.setBounds(10, 27, 59, 14);
		panel.add(label);

		JLabel label_1 = new JLabel("Nombre:");
		label_1.setBounds(219, 27, 59, 14);
		panel.add(label_1);

		JLabel label_2 = new JLabel("DNI:");
		label_2.setBounds(415, 27, 37, 14);
		panel.add(label_2);

		JLabel label_3 = new JLabel("Calle:");
		label_3.setBounds(10, 117, 59, 14);
		panel.add(label_3);

		JLabel label_4 = new JLabel("Barrio:");
		label_4.setBounds(10, 151, 46, 14);
		panel.add(label_4);

		txtApellido = new JTextField();
		txtApellido.setColumns(10);
		txtApellido.setBounds(79, 24, 123, 20);
		panel.add(txtApellido);

		txtNombre = new JTextField();
		txtNombre.setColumns(10);
		txtNombre.setBounds(282, 24, 123, 20);
		panel.add(txtNombre);

		txtDni = new JTextField();
		txtDni.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ConstantesGlobales.validarNumero(e);
			}
		});
		txtDni.setColumns(10);
		txtDni.setBounds(456, 24, 123, 20);
		panel.add(txtDni);

		txtCalle = new JTextField();
		txtCalle.setColumns(10);
		txtCalle.setBounds(79, 114, 282, 20);
		panel.add(txtCalle);

		txtBarrio = new JTextField();
		txtBarrio.setColumns(10);
		txtBarrio.setBounds(79, 145, 282, 20);
		panel.add(txtBarrio);

		JLabel label_5 = new JLabel("Localidad:");
		label_5.setBounds(10, 185, 59, 14);
		panel.add(label_5);

		txtLocalidad = new JTextField();
		txtLocalidad.setColumns(10);
		txtLocalidad.setBounds(79, 179, 282, 20);
		panel.add(txtLocalidad);

		JLabel label_6 = new JLabel("Provincia:");
		label_6.setBounds(10, 213, 59, 14);
		panel.add(label_6);

		txtProvincia = new JTextField();
		txtProvincia.setColumns(10);
		txtProvincia.setBounds(79, 207, 282, 20);
		panel.add(txtProvincia);

		JLabel label_10 = new JLabel("Legajo:");
		label_10.setBounds(10, 83, 123, 20);
		panel.add(label_10);

		txtLegajo = new JTextField();
		txtLegajo.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ConstantesGlobales.validarNumero(e);
			}
		});
		txtLegajo.setColumns(10);
		txtLegajo.setBounds(79, 83, 123, 20);
		panel.add(txtLegajo);

		txtEmail = new JTextField();
		txtEmail.setColumns(10);
		txtEmail.setBounds(282, 83, 123, 20);
		panel.add(txtEmail);

		txtCel = new JTextField();
		txtCel.setColumns(10);
		txtCel.setBounds(282, 55, 123, 20);
		panel.add(txtCel);

		txtTel = new JTextField();
		txtTel.setColumns(10);
		txtTel.setBounds(79, 55, 123, 20);
		panel.add(txtTel);

		txtNro = new JTextField();
		txtNro.setColumns(10);
		txtNro.setBounds(456, 117, 92, 20);
		panel.add(txtNro);

		JLabel label_8 = new JLabel("N\u00B0:");
		label_8.setHorizontalAlignment(SwingConstants.LEFT);
		label_8.setBounds(415, 120, 37, 14);

		panel.add(label_8);

		JLabel label_9 = new JLabel("Telefono:");
		label_9.setBounds(10, 58, 59, 14);
		panel.add(label_9);

		JLabel label_101 = new JLabel("Celular:");
		label_101.setBounds(219, 58, 59, 14);
		panel.add(label_101);

		JLabel label_11 = new JLabel("e-mail:");
		label_11.setBounds(219, 86, 59, 14);
		panel.add(label_11);

		chckUsuarioSis = new JCheckBox("Usuario del Sistema");
		chckUsuarioSis
				.setToolTipText("Se enviara una notificacion al administrador si se desea que el responsable sea usuario del sistema");
		chckUsuarioSis.setBounds(20, 252, 182, 23);
		panel.add(chckUsuarioSis);

		JLabel label_12 = new JLabel(
				"Tilde esta opcion si necesita que el usuario que esta creando tenga acceso a esta informacion");
		label_12.setBounds(10, 238, 569, 14);
		panel.add(label_12);
	}

	public void crearBotones() {
		JButton btnAgregar = new JButton("Agregar");
		btnAgregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (chckUsuarioSis.isSelected()) {
					guardarUsuarioResp();
				} else {
					guardarResponsable();
				}
				
				
				dispose();
			}
		});
		btnAgregar.setBounds(389, 315, 100, 25);
		getContentPane().add(btnAgregar);

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnCancelar.setActionCommand("Cancel");
		btnCancelar.setBounds(499, 315, 100, 25);
		getContentPane().add(btnCancelar);
	}

	protected Responsable obtenerRespo() {
		responsable = new Responsable();
		
		responsable.setApellido(txtApellido.getText());
		
		responsable.setBarrio(txtBarrio.getText());
		
		responsable.setCalle(txtCalle.getText());
		
		responsable.setCelular(txtCel.getText());
		
		responsable.setDni(Integer.parseInt(txtDni.getText()));
		
		responsable.setEmail(txtEmail.getText());
		
		responsable.setLegajo(Integer.parseInt(txtLegajo.getText()));
		
		responsable.setLocalidad(txtLocalidad.getText());
		
		responsable.setNombre(txtNombre.getText());
		
		responsable.setNumero(Integer.parseInt(txtNro.getText()));
		
		responsable.setProvincia(txtProvincia.getText());
	
		responsable.setTelefono(txtTel.getText());
		
		responsable.setUsuarios(null);
		return responsable;
	}

	protected void guardarUsuarioResp() {
		try {
			Usuario u = new Usuario();
			u.setClave(txtDni.getText());
			u.setCorreoElectronico(txtEmail.getText());
			u.setNombreUsuario(txtLegajo.getText());
			u.setPerfil(new PerfilDAOImp().get(1));
			u.setEstado(false);
			u.setResponsable(obtenerRespo());
			new UsuarioDAOImp().insert(u);
			AllShowMessage
					.showMessage(ConstantesGlobales.MENSAJE_GUARDAR_CORRECTO);
			setNewResponsable(true);
		} catch (Exception e) {
			e.printStackTrace();
			AllShowMessage
					.showErrorMessage(ConstantesGlobales.MENSAJE_GUARDAR_ERROR
							+ e);
		}
	}

	protected void guardarResponsable() {
		try {
			new ResponsableDAOImpl().insert(getResponsable());
			AllShowMessage
					.showMessage(ConstantesGlobales.MENSAJE_GUARDAR_CORRECTO);
			setNewResponsable(true);
		} catch (Exception e) {
			e.printStackTrace();
			AllShowMessage
					.showErrorMessage(ConstantesGlobales.MENSAJE_GUARDAR_ERROR
							+ e);
		}
	}

	public Responsable getResponsable() {
		// logger.info("dni buscado: "+obtenerRespo().getDni());
		new ResponsableDAOImpl().checkDni(obtenerRespo().getDni());
		return responsable;
	}

	public void setResponsable(Responsable responsable) {
		this.responsable = responsable;
	}

	public boolean isNewResponsable() {
		return newResponsable;
	}

	public void setNewResponsable(boolean newResponsable) {
		this.newResponsable = newResponsable;
	}
}
